My portfolio¶

In [1]:
from src.domain.distribution import SharesDistribution
from src.domain.share_type import Cap, Term, Region, ShareType

TOTAL = 1

distribution = SharesDistribution(
    by_type=dict(zip((ShareType.Stock, ShareType.Bond), (0.75, 0.25))),
    by_region=dict(zip((Region.US, Region.ExUS), (0.7, 0.3))),
    by_cap=dict(zip((Cap.Large, Cap.Small), (0.8, 0.2))),
    by_term=dict(zip((Term.Long, ), (1, ))),
)

large_us_stocks = {
    "VTI": 0.8,
    "VNQ (REIT)": 0.2
}

large_exus_stocks = {
    "EAFE": 1
}

small_us_stocks = {
    "Russell 2000": 1
}

small_exus_stocks = {
    "EAFE Small-Cap": 1
}

bonds = {
    "BND": 1
}

def assert_shares(obj):
    assert sum(obj.values()) == TOTAL

fund_shares = [large_us_stocks, large_exus_stocks, small_us_stocks, small_exus_stocks, bonds]

for shares in [distribution.by_cap, distribution.by_region, distribution.by_term, distribution.by_type] + fund_shares:
    assert_shares(shares)

Плоское портфолио акций¶

In [2]:
flatten_stock_portfolio = []

stock_share = distribution.by_type[ShareType.Stock]

for (region_key, region_value) in distribution.by_region.items():
    for (cap_key, cap_value) in distribution.by_cap.items():
        flatten_stock_portfolio.append({
            "region": region_key.value,
            "share": stock_share * region_value * cap_value,
            "cap": cap_key.value
        })
        
def sort_by_share(portfolio):
    return sorted(portfolio, key=lambda x: x["share"], reverse=True)
        
flatten_stock_portfolio = sort_by_share(flatten_stock_portfolio)
In [7]:
import pandas as pd
from IPython.display import display
from src.portfolio import prepare_stock_table_rows, get_stock_name
from src.display.distribution import display_distributions

stocks_table = prepare_stock_table_rows(flatten_stock_portfolio)
    
df = pd.DataFrame(stocks_table, columns=['Share', 'Share of all'], index=[get_stock_name(x) for x in flatten_stock_portfolio])
display(df)

display_distributions([distribution], ["Portfolio"], fund_shares)
Share Share of all
Us Large-cap stocks 56.0% 42.0%
Ex-us Large-cap stocks 24.0% 18.0%
Us Small-cap stocks 14.0% 10.5%
Ex-us Small-cap stocks 6.0% 4.5%
Portfolio
VTI 33.6%
VNQ (REIT) 8.4%
EAFE 18.0%
Russell 2000 10.5%
EAFE Small-Cap 4.5%
BND 25.0%
Mean ret. Std
Portfolio 8.56 11.08

TODO¶

Analytics¶

  • Variate portfolio by region, cap size
  • Add distribution by growth/value stocks
  • Calculate correlations for Portfolio vs. S&P 500/US Treasure Bonds
  • Research current P/E, P/B by sectors

Technical¶

  • Move data initialization to Python scripts
  • Automate notebook HTML view updates
  • Separate notebook to several ones
  • Create Github pages